Zurück in Fortgeschrittene ProgrammentwicklungWeiter in Fortgeschrittene ProgrammentwicklungEffizienzbetrachtungen Zusammenfassung ?

Beim Entwurf von Grundoperationen wie Einfügen, Löschen und Suchen zeigen sich die Vor- und Nachteile der Datenstrukturen Datenfeld, verkettete Liste und Binärbaum:

  1. Bei kleinen Datenmengen ist das Datenfeld aufgrund seiner Einfachheit oft am geeignetsten. Effizienznachteile bei Einfüge- und Löschoperationen machen sich bei kleinen Datenmengen kaum bemerkbar. Ausserdem ist das Datenfeld immer dann in Betracht zu ziehen, wenn die direkte Suche angewendet werden kann.

  2. Die verkettete Liste bietet zwar effizientere Einfüge- und Löschoperationen als das Datenfeld, die Elemente können aber nur sequentiell durchsucht werden. Auch die verkettete Liste eignet sich damit eher für kleine Datenmengen.

  3. Bei grossen Datenmengen hat in der Regel der Binärbaum die Nase vorne. Die Einfüge- und Löschoperationen sind so effizient, wie jene der verketteten Liste. Die Suche ist beinahe so schnell wie die binäre Suche im Datenfeld. Die Algorithmen sind zwar komplizierter. Für grosse Datenmengen lohnt sich jedoch der Implementationsaufwand.

Die Datenmenge und die Frage, welche Operationen häufig benötigt werden, sind wichtige Kriterien bei der Entscheidung für oder gegen eine Datenstruktur und ihre Algorithmen. Eine definitive Entscheidung sollte aber auch die zu verarbeitenden Daten betrachten. Sind beispielsweise die Daten mehr oder weniger sortiert, so ist der Aufwand, den man betreiben muss, um einen ausbalancierten Baum zu erstellen, gross. Dagegen ist der Aufwand geringer, um ein sortiertes Datenfeld aufzubauen, das binär durchsucht werden kann.

Hat man sich für eine Datenstruktur entschieden, so bleibt immer noch die Wahl zwischen verschiedenen Algorithmen. Auch hier werden meist Kompromisse eingegangen. Kann man zum Beispiel in einem Datenfeld auf die Binärsuche verzichten, so braucht man das Datenfeld nicht sortiert zu halten. Das Einfügen neuer Elemente ist so wesentlich einfacher.

Hat man neben den Datenstrukturen auch die Algorithmen bestimmt, so bleibt noch Spielraum für Optimierungen. Viele Algorithmen lassen sich zum Beispiel durch Speichern von Zwischenresultaten beschleunigen. Dies geht allerdings auf Kosten der Speichereffizienz. Die Implementationsziele Speicherminimierung und Laufzeitmaximierung konkurrieren sich in der Regel. Optimierungen, welche die Laufzeit eines Algorithmus verbessern, verschlechtern die Speichereffizienz der verwendeten Datenstrukturen und umgekehrt.

Die Qualität des Algorithmus selbst lässt sich nicht verbessern, indem man ihn in einer anderen Programmiersprache implementiert oder ihn auf einem schnelleren Rechner ausführen lässt. Sie lässt sich auch nicht mit der Stoppuhr messen. Um die Geschwindigkeit von Algorithmen untereinander vergleichen zu können, benötigt man ein plattformunabhängiges Kritierium. Ein einfaches Mass ist die Anzahl Schritte, in der ein Algorithmus im Schnitt die Probleme einer bestimmten Problemklasse löst. Oft zählt man sogar nur die Anzahl Entscheidungen, die ein Algorithmus treffen muss, um ein Problem zu lösen. Die Problemklassen berücksichtigen die Anzahl und die Art der Eingangsdaten.

Bei Baumstrukturen ist die Geschwindigkeit der Algorithmen meist proportional zur Höhe der Bäume, während sie bei der verketteten Liste in der Regel 'nur' proportional zur Anzahl der Elemente ist. Die folgende Tabelle vergleicht abschliessend die Geschwindigkeiten einiger Operationen auf einem ausbalancierten Binärbaum mit entsprechenden Operationen auf einer einfach verketteten Liste und auf einem sortierten Datenfeld. Dabei bezeichnet N die Anzahl Elemente und H die Höhe, wobei ein Binärbaum der Höhe H maximal

Elemente speichern kann.

Die Abschätzungen der Tabelle sind grob. Die Anmerkungen nennen zwar die Algorithmen, die den Abschätzungen zugrunde liegen, trotzdem sind die Probleme dadurch nicht immer klar definiert. Beispielsweise ist bei der Einfügeoperation nicht definiert, ob man bereits weiss, wo das Element eingefügt werden soll, oder ob man die Position zuerst bestimmen muss. Ein 'fairer' Vergleich müsste deshalb die Algorithmen im Kontext einer umfassenden Aufgabenstellung messen.

©abo